package com.xudow.app.ui.task;

import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;

import com.activeshare.edu.ucenter.common.messages.course.ListCourseMessage;
import com.activeshare.edu.ucenter.models.course.CourseWithOtherInfo;
import com.google.gson.Gson;
import com.xudow.app.Config;
import com.xudow.app.XApplication;
import com.xudow.app.newui.bean.ListCourseMessage2;
import com.xudow.app.ui.CourseSearchActivity;
import com.xudow.app.util.FileUtils;
import com.xudow.app.util.StringUtils;
import com.xudow.app.util.TextUtils;
import com.xudow.app.util.rest.XRestTemplate;

import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.web.client.RestTemplate;

import java.io.File;
import java.util.HashMap;
import java.util.List;

import static com.xudow.app.util.LogUtils.LOGE;
import static com.xudow.app.util.LogUtils.makeLogTag;

/**
 * 获取课程列表Task
 *
 * @author lukecheng
 */
public class CourseListTask extends AsyncTask<HashMap<String, String>, Void, Void> {
    private static final String TAG = makeLogTag(CourseListTask.class);

    private String url = Config.BASE_URL + Config.COURSE_LIST_URL;

    public static final int SUCCESS = 0;
    public static final int ERROR = 1;

    private Context context;
    private Handler handler;

    public CourseListTask(Context context, Handler handler) {
        this.context = context;
        this.handler = handler;
    }

    public CourseListTask(Context context, Handler handler, String url) {
        this.context = context;
        this.handler = handler;
        this.url = url;
    }

    private void sendErrorMessage(String msg) {
        android.os.Message message = new android.os.Message();
        message.what = ERROR;

        if (null != msg) {
            Bundle data = new Bundle();
            data.putString("errMessage", msg);
            message.setData(data);
        }

        handler.sendMessage(message);
    }

    private void sendSuccessMessage(List<ListCourseMessage.CourseListEntity> courses) {
        android.os.Message message = new android.os.Message();
        message.what = SUCCESS;

        Bundle data = new Bundle();

        if (courses != null) {
            ListCourseMessage.CourseListEntity[] courseArr = new ListCourseMessage.CourseListEntity[courses.size()];
            for (int i = 0; i < courses.size(); i++) {
                courseArr[i] = courses.get(i);
            }

            data.putSerializable("courses", courseArr);
            message.setData(data);
        }

        handler.sendMessage(message);
    }

    @Override
    protected Void doInBackground(HashMap<String, String>... parameters) {
        XApplication application = (XApplication) context.getApplicationContext();

        XRestTemplate restTemplate = new XRestTemplate(application.getCookieStore(), context);
        restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
        // restTemplate.getMessageConverters().add(new StringHttpMessageConverter());
        LinkedMultiValueMap<String, String> valueMap = new LinkedMultiValueMap<String, String>();

        HashMap<String, String> params = parameters[0];

        Log.i("CourseListTask","url>>>>"+url);
       /* if (!StringUtils.isEmpty(params.get(Config.PAGINATION_PARAM_NAME))) {
            valueMap.add(Config.PAGINATION_PARAM_NAME, params.get(Config.PAGINATION_PARAM_NAME));
        }

        if (!StringUtils.isEmpty(params.get(Config.PAGINATION_OFFSET_PARAM_NAME))) {
            valueMap.add(Config.PAGINATION_OFFSET_PARAM_NAME, params.get(Config.PAGINATION_OFFSET_PARAM_NAME));
        } else {
            valueMap.add(Config.PAGINATION_OFFSET_PARAM_NAME, Config.PAGINATION_OFFSET_DEFAULT_VALUE);
        }*/

//        Log.i("CourseListTask","coursename>>>>"+params.get("coursename")+">>offset>>>>" + params.get("offset")+">>page>>>>" + params.get("page")+
//        ">>gradeids>>>>" + params.get("gradeids")+">>searchtype>>>>" + params.get("searchtype")+">>sorttype>>>>" + params.get("sorttype")+
//        ">>sendUserid>>>>" + params.get("sendUserid")+">>timestamp>>>>" + params.get("timestamp")+">>level_one>>>>" + params.get("level_one")+
//        ">>level_two>>>>" + params.get("level_two")+">>level_three>>>>" + params.get("level_three")+">>longitude>>>>" + params.get("longitude")+
//        ">>latitude>>>>" + params.get("latitude")+">>area_id>>>>" + params.get("area_id")+">>school_id>>>>" + params.get("school_id")+">>course_type>>>>" + params.get("course_type")+
//        ">>areaId>>>>" + params.get("areaId")+">>townId>>>>" + params.get("townId")+">>schoolId>>>>" + params.get("schoolId")+">>agencyId>>>>" + params.get("agencyId")+
//        ">>week>>>>" + params.get("week")+">>begindateId>>>>" + params.get("begindateId")+">>gradeid>>>>" + params.get("gradeid")+">>coursePriceId>>>>" + params.get("coursePriceId")+
//        ">>semesterid>>>>" + params.get("semesterid")+">>enrolling>>>>" + params.get("enrolling")+">>allTowns>>>>" + params.get("allTowns")+
//         ">>allClasses>>>>" + params.get("allClasses")+">>allSubjects>>>>" + params.get("allSubjects")+">>allGradeids>>>>" + params.get("allGradeids")+
//          ">>leaveType>>>>" + params.get("leaveType")+">>typesTwoname>>>>" + params.get("typesTwoname"));

//        //关键字
//        if (!android.text.TextUtils.isEmpty(params.get("coursename"))) {
//            valueMap.add("coursename", params.get("coursename"));
//            Log.i("CourseListTask","coursename>>>>"+params.get("coursename"));
//        }
        //分页条数
        if (!android.text.TextUtils.isEmpty(params.get("offset"))) {
            valueMap.add("offset", params.get("offset"));
            Log.i("CourseListTask", "offset>>>>" + params.get("offset"));
        }
        //第几页
        if (!android.text.TextUtils.isEmpty(params.get("page"))) {
            valueMap.add("page", params.get("page"));
            Log.i("CourseListTask", "page>>>>" + params.get("page"));
        }
        //年级
//        if (!android.text.TextUtils.isEmpty(params.get("gradeids"))) {
//            valueMap.add("gradeids", params.get("gradeids"));
//            Log.i("CourseListTask", "gradeids>>>>" + params.get("gradeids"));
//        }
        //兴趣
        /*if (!android.text.TextUtils.isEmpty(params.get("subjectids"))) {
            valueMap.add("subjectids", params.get("subjectids"));
        }*/
//        //查询类别
//        if (!android.text.TextUtils.isEmpty(params.get("searchtype"))) {
//            valueMap.add("searchtype", params.get("searchtype"));
//            Log.i("CourseListTask", "searchtype>>>>" + params.get("searchtype"));
//        }
//        //排序类别
//        if (!android.text.TextUtils.isEmpty(params.get("sorttype"))) {
//            valueMap.add("sorttype", params.get("sorttype"));
//            Log.i("CourseListTask", "sorttype>>>>" + params.get("sorttype"));
//        }
//        //发布者编号
//        if (!android.text.TextUtils.isEmpty(params.get("sendUserid"))) {
//            valueMap.add("sendUserid", params.get("sendUserid"));
//            Log.i("CourseListTask", "sendUserid>>>>" + params.get("sendUserid"));
//        }
//        //最后一次查看时间
//        if (!android.text.TextUtils.isEmpty(params.get("timestamp"))) {
//            valueMap.add("timestamp", params.get("timestamp"));
//            Log.i("CourseListTask", "timestamp>>>>" + params.get("timestamp"));
//        }
//        //一级分类
//        if (!android.text.TextUtils.isEmpty(params.get("level_one"))) {
//            valueMap.add("level_one", params.get("level_one"));
//            Log.i("CourseListTask", "level_one>>>>" + params.get("level_one"));
//        }
//
//        //二级分类
//        if (!android.text.TextUtils.isEmpty(params.get("level_two"))) {
//            valueMap.add("level_two", params.get("level_two"));
//            Log.i("CourseListTask", "level_two>>>>" + params.get("level_two"));
//        }
//
//        //三级分类
//        if (!android.text.TextUtils.isEmpty(params.get("level_three"))) {
//            valueMap.add("level_three", params.get("level_three"));
//            Log.i("CourseListTask", "level_three>>>>" + params.get("level_three"));
//        }
//       String jw="0.0";
//        //经度
//        if (params.get("longitude")!=jw) {
//            valueMap.add("longitude", params.get("longitude"));
//            Log.i("CourseListTask", "longitude>>>>" + params.get("longitude"));
//        }
//
//        //纬度
//        if (params.get("latitude")!=jw) {
//            valueMap.add("latitude", params.get("latitude"));
//            Log.i("CourseListTask", "latitude>>>>" + params.get("latitude"));
//        }
//
//        //地区id
//        if (!android.text.TextUtils.isEmpty(params.get("area_id"))) {
//            valueMap.add("area_id", params.get("area_id"));
//            Log.i("CourseListTask", "area_id>>>>" + params.get("area_id"));
//        }
//        //学校Id
//        if (!android.text.TextUtils.isEmpty(params.get("school_id"))){
//            valueMap.add("school_id",params.get("school_id"));
//            Log.i("CourseListTask", "school_id>>>>" + params.get("school_id"));
//        }
//        //课程类别
//        if(!android.text.TextUtils.isEmpty(params.get("course_type"))){
//            valueMap.add("course_type", params.get("course_type"));
//            Log.i("CourseListTask", "course_type>>>>" + params.get("course_type"));
//        }
//
//
////        Log.i("tiaojian2","schoolId"+params.get("schoolId")+"agencyId"+params.get("agencyId"));
//
//
//        if(!android.text.TextUtils.isEmpty(params.get("areaId"))){
//            valueMap.add("areaId", params.get("areaId"));
//            Log.i("CourseListTask", "areaId>>>>" + params.get("areaId"));
//        }
//
//        if(!android.text.TextUtils.isEmpty(params.get("townId"))){
//            valueMap.add("townId", params.get("townId"));
//            Log.i("CourseListTask", "townId>>>>" + params.get("townId"));
//        }
//        if(!android.text.TextUtils.isEmpty(params.get("schoolId"))){
//            valueMap.add("schoolId", params.get("schoolId"));
//            Log.i("CourseListTask", "schoolId>>>>" + params.get("schoolId"));
//        }
//
//        if(!android.text.TextUtils.isEmpty(params.get("agencyId"))){
//            valueMap.add("agencyId", params.get("agencyId"));
//            Log.i("CourseListTask", "agencyId>>>>" + params.get("agencyId"));
//        }
//
//
//        if(!android.text.TextUtils.isEmpty(params.get("week"))){
//            valueMap.add("week", params.get("week"));
//            Log.i("CourseListTask", "week>>>>" + params.get("week"));
//        }
//
//
//        if(!android.text.TextUtils.isEmpty(params.get("begindateId"))){
//            valueMap.add("begindateId", params.get("begindateId"));
//
//            Log.i("CourseListTask", "begindateId>>>>" + params.get("begindateId"));
//        }
//        if(!android.text.TextUtils.isEmpty(params.get("gradeid"))){
//            valueMap.add("gradeid", params.get("gradeid"));
//            Log.i("CourseListTask", "gradeid>>>>" + params.get("gradeid"));
//
//        }
//        if(!android.text.TextUtils.isEmpty(params.get("coursePriceId"))){
//            valueMap.add("coursePriceId", params.get("coursePriceId"));
//            Log.i("CourseListTask", "coursePriceId>>>>" + params.get("coursePriceId"));
//
//        }
//        if(!android.text.TextUtils.isEmpty(params.get("semesterid"))){
//            valueMap.add("semesterid", params.get("semesterid"));
//            Log.i("CourseListTask", "semesterid>>>>" + params.get("semesterid"));
//
//        }
//        if(!android.text.TextUtils.isEmpty(params.get("enrolling"))){
//            valueMap.add("enrolling", params.get("enrolling"));
//            Log.i("CourseListTask", "enrolling>>>>" + params.get("enrolling"));
//
//        }
//
//
//        if(!android.text.TextUtils.isEmpty(params.get("allTowns"))){
//        valueMap.add("allTowns", "at");
//            Log.i("CourseListTask", "allTowns>>>>" + params.get("allTowns"));
//
//        }
//        if(!android.text.TextUtils.isEmpty(params.get("allClasses"))){
//        valueMap.add("allClasses", "ac");
//            Log.i("CourseListTask", "allClasses>>>>" + params.get("allClasses"));
//
//        }
//        if(!android.text.TextUtils.isEmpty(params.get("allSubjects"))) {
//            valueMap.add("allSubjects ", "asb");
//            Log.i("CourseListTask", "allSubjects>>>>" + params.get("allSubjects"));
//
//        }
//            if(!android.text.TextUtils.isEmpty(params.get("allGradeids"))) {
//                valueMap.add("allGradeids ", "ag");
//                Log.i("CourseListTask", "allGradeids>>>>" + params.get("allGradeids"));
//
//            }
//
//
//        if(params.get("leaveType")!=null){
//            valueMap.add("course_type", params.get("leaveType"));
//            Log.i("CourseListTask", "leaveType>>>>" + params.get("leaveType"));
//        }
//
//        if(params.get("typesTwoname")!=null){
//            valueMap.add("typesTwoname", params.get("typesTwoname"));
//            Log.i("CourseListTask", "typesTwoname>>>>" + params.get("typesTwoname"));
//        }




//            ListCourseMessage result = restTemplate.postForObject(url, valueMap,
//                    ListCourseMessage.class);

            try {
                String result = restTemplate.postForObject(url, valueMap,
                        String.class);

                Log.i("sendSuccessMessage", "result>>>>" +result);
                ListCourseMessage listCourseMessage = null;
                listCourseMessage = new Gson().fromJson(result.toString(), ListCourseMessage.class);
                Log.i("CourseList","listCourseMessage>>>"+listCourseMessage);
                if (listCourseMessage != null) {

                    //FileUtils.writeFile(result1,new File(context.getCacheDir().getAbsolutePath(),"courseList1.txt"));
                    if (listCourseMessage.getResult().equals("0")) {

                        sendSuccessMessage(listCourseMessage.getCourseList());

                    } else if (listCourseMessage.getResult().equals("1")) {
                        Log.i("sendSuccessMessage","listCourseMessage>>>"+listCourseMessage.getErrorMessage());
                        sendErrorMessage(listCourseMessage.getErrorMessage());

                    }
                } else {
                    Log.i("sendSuccessMessage", "else>>>>sendErrorMessage(null);");
                    sendErrorMessage(null);

                }

            } catch (Exception e) {
                sendErrorMessage(e.getMessage());
                Log.i("sendSuccessMessage", "Exception>>>>" + e.getMessage());
//                      Log.i("listCourseMessage","listCourseMessage>>"+listCourseMessage);
//                      Log.i("listCourseMessage","listCourseMessageeee>>"+e);

            }


        return null;
    }
}
